package assert

import (
	"errors"
	"reflect"
)

func IsTrue(expr bool, msg string) {
	if !expr {
		panic(errors.New(msg))
	}
}

func IsFalse(expr bool, msg string) {
	if expr {
		panic(errors.New(msg))
	}
}

func NonNil(data any, msg string) {
	if isNil(data) {
		panic(errors.New(msg))
	}
}

func NotBlank(s string, msg string) {
	if s == "" {
		panic(errors.New(msg))
	}
}

func isNil(a any) bool {
	// 空接口判断是否为nil，必须类型和值都为nil才会返回真
	// 大多数情况是：type不为nil, value为nil
	// 那就需要继续判断了，使用反射判断
	if a == nil {
		return true
	}
	rv := reflect.ValueOf(a)
	if !rv.IsValid() {
		return true
	}
	return rv.IsZero()
}
